import java.util.PriorityQueue;

/**
 * 2208.将数组和减半的最少操作次数
 */
public class Exerciser2 {
    public int halveArray(int[] nums) {
        // 每次查找最大的一个数，对其进行 除二 操作，之后用 和的一半进行减去这个数，直至小于等于0的时候
        // 借助 大根堆
        PriorityQueue<Double> heap = new PriorityQueue<>((a, b) -> b.compareTo(a));
        double sum = 0;
        int n = nums.length;
        for(double x : nums) {
            heap.offer(x);
            sum += x;
        }

        sum /= 2.0;
        int count = 0;
        while(sum > 0) {
            double t = heap.poll() / 2.0;
            sum -= t;
            count++;
            heap.offer(t);
        }
        return count;
    }
}
